package com.flyqiu.common.bean;


import com.baomidou.mybatisplus.extension.service.IService;

import java.util.Map;

public interface FlyQiuBeanManage {

    /**
     * 添加bean对象
     *
     * @param clazz     类对象
     * @param clazzInst 实例对象
     * @param <T>       泛型
     */
    <T> void addBean(Class<T> clazz, T clazzInst);

    /**
     * 添加bean对象
     *
     * @param clazzInst 实例对象
     */
    void addBean(Object clazzInst);

    /**
     * 是否存在bean
     *
     * @param clazz 类对象
     * @return true 存在 false 不存在
     */
    boolean hasBean(Class<?> clazz);

    /**
     * 获取bean对象
     *
     * @param clazz 类对象
     * @param <T>   bean对象实例
     * @return bean对象
     */
    <T> T getBean(Class<T> clazz);

    /**
     * 获取bean对象map
     *
     * @param clazz bean类型
     * @param <T>   bean对象实例
     * @return bean对象map
     */
    <T> Map<String, T> getBeanMap(Class<T> clazz);

    /**
     * 添加服务
     *
     * @param clazz   类对象
     * @param service 服务
     * @param <T>     服务
     */
    <T extends IService<?>> void addService(Class<T> clazz, T service);

    /**
     * 获取服务
     *
     * @param clazz 类对象
     * @param <T>   服务
     * @return 服务
     */
     <T extends IService<?>> T getService(Class<T> clazz);

    /**
     * 获取mapper
     *
     * @param clazz 类对象
     * @param <T>   mapper
     * @return mapper
     */
     <T> T getMapper(Class<T> clazz);

     /**
      * 自动注入
      *
      * @param bean bean对象
      */
      void autowire(Object bean);
}
